Generally, memory management presents challenges inasmuch as a monitoring application therefor normally shares memory on the monitored system itself.
In cloud or data center monitoring, a system allocates different threads to monitor different VMs (virtual machines). Each thread maintains monitoring information or logs about the VM it is monitoring and is configured to generate associated reports in real-time. This leads to a need for an overwhelming use of system memory by monitoring threads.
In contexts of dynamic thread migration (e.g., with “Java”), there is a need to monitor the execution state of Java threads internal to JVMs (“Java Virtual Machines”) and transfer this state to a target node on which execution can be restored. Other challenges addressed thereby are workload balancing, a co-location of computation and data, a need to follow a user in his/her movements, and mobile computing. Both application-level and JVM-level implementations involve very significant overhead and have a decisive effect on performance.